需要記得的東西出現了... (´・ω・`)
在進入部署以前,要先認識 Kubernetes 設定檔的格式。
Kubernetes 的設定只支援 yaml 和 json ,json 用於 API 傳遞,yaml 則是用在設定和配置。
有件事很重要:
yaml 區分大小寫
基本架構很單純,絕大多數配置都是以這個模板去延伸,先記得就對了!
apiVersion:
kind:
metadata:
spec:
apiVersion: v1
kind: Pod
metadata:
name: <pod名稱>
labels:
app: myapp
spec:
conatiners:
- name: <container名稱>
image: <要部署的image>
- name: <container名稱>
image: <要部署的image>
)區分-符號為項目分界有興趣可以往下看看 apiVersion,或是有需要再 Google 就好
如果怕忘了元件對應的 apiVersion,可以用這個指令確認
kubectl api-resources
(紅色標示為較常使用的基礎元件)
| KIND | SHORTNAMES | APIVERSION | NAMESPACED |
|---|---|---|---|
Binding |
v1 | true | |
| ComponentStatus | cs | v1 | false |
ConfigMap |
cm | v1 | true |
Endpoints |
ep | v1 | true |
| Event | ev | v1 | true |
| LimitRange | limits | v1 | true |
Namespace |
ns | v1 | false |
Node |
no | v1 | false |
PersistentVolumeClaim |
pvc | v1 | true |
PersistentVolume |
pv | v1 | false |
Pod |
po | v1 | true |
| PodTemplate | v1 | true | |
| ReplicationController | rc | v1 | true |
| ResourceQuota | quota | v1 | true |
| Secret | v1 | true | |
ServiceAccount |
sa | v1 | true |
Service |
svc | v1 | true |
| MutatingWebhookConfiguration | admissionregistration.k8s.io/v1 | false | |
| ValidatingAdmissionPolicy | admissionregistration.k8s.io/v1 | false | |
| ValidatingAdmissionPolicyBinding | admissionregistration.k8s.io/v1 | false | |
| ValidatingWebhookConfiguration | admissionregistration.k8s.io/v1 | false | |
| CustomResourceDefinition | crd,crds | apiextensions.k8s.io/v1 | false |
| APIService | apiregistration.k8s.io/v1 | false | |
| ControllerRevision | apps/v1 | true | |
| DaemonSet | ds | apps/v1 | true |
Deployment |
deploy | apps/v1 | true |
ReplicaSet |
rs | apps/v1 | true |
| StatefulSet | sts | apps/v1 | true |
| SelfSubjectReview | authentication.k8s.io/v1 | false | |
| TokenReview | authentication.k8s.io/v1 | false | |
| LocalSubjectAccessReview | authorization.k8s.io/v1 | true | |
| SelfSubjectAccessReview | authorization.k8s.io/v1 | false | |
| SelfSubjectRulesReview | authorization.k8s.io/v1 | false | |
| SubjectAccessReview | authorization.k8s.io/v1 | false | |
| HorizontalPodAutoscaler | hpa | autoscaling/v2 | true |
| CronJob | cj | batch/v1 | true |
| Job | batch/v1 | true | |
| CertificateSigningRequest | csr | certificates.k8s.io/v1 | false |
| Lease | coordination.k8s.io/v1 | true | |
| EndpointSlice | discovery.k8s.io/v1 | true | |
| Event | ev | events.k8s.io/v1 | true |
| FlowSchema | flowcontrol.apiserver.k8s.io/v1 | false | |
| PriorityLevelConfiguration | flowcontrol.apiserver.k8s.io/v1 | false | |
| IngressClass | networking.k8s.io/v1 | false | |
| Ingress | ing | networking.k8s.io/v1 | true |
| NetworkPolicy | netpol | networking.k8s.io/v1 | true |
| RuntimeClass | node.k8s.io/v1 | false | |
| PodDisruptionBudget | pdb | policy/v1 | true |
| ClusterRoleBinding | rbac.authorization.k8s.io/v1 | false | |
| ClusterRole | rbac.authorization.k8s.io/v1 | false | |
| RoleBinding | rbac.authorization.k8s.io/v1 | true | |
| Role | rbac.authorization.k8s.io/v1 | true | |
| PriorityClass | pc | scheduling.k8s.io/v1 | false |
| CSIDriver | storage.k8s.io/v1 | false | |
| CSINode | storage.k8s.io/v1 | false | |
| CSIStorageCapacity | storage.k8s.io/v1 | true | |
| StorageClass | sc | storage.k8s.io/v1 | false |
| VolumeAttachment | storage.k8s.io/v1 | false |
從上表不難發現,apiVersion有不同格式,雖然格式有些複雜,但其實有其規則可循:
| apiVersion | Resources |
|---|---|
| v1 | Pod, Service, ConfigMap, Secret |
| apps/v1 | Deployment, ReplicaSet, StatefulSet, DaemonSet |
| batch/v1 | Job, CronJob |
| networking.k8s.io/v1 | Ingress, NetworkPolicy |
| storage.k8s.io/v1 | StorageClass, VolumeAttachment |
不同的 apiVersion 可能會改變資源的定義方式,新版本可能引入新功能,也可能棄用舊功能,通常 v1 表示穩定版本,beta(如 v1beta1)為預計發佈版,alpha 則為測試版,可能在未來更新時出現變化,使用時須特別留意。
欸!為什麼 Event 有兩個版本?
是新舊版本的差異,
events.k8s.io/v1是比較新的版本(也是社群比較建議使用的)。
雖說舊版 v1 並未停用,從最新版 v1.31和前一版 v1.30(stable)的 API 文件都還可以確認仍有支援,但若直接從官方文件搜尋:Event,就只會看到 events.k8s.io/v1 的版本,什麼意思應該不言而喻了吧... (・_・;相關的討論可以參考:core v1 Event API needs improvement?
我不會告訴你查這些文件花了多久時間,五告拍揣。
在學習 Kubernetes 的過程中,掌握用於定義和配置的 yaml 格式是無可避免的,雖說細部配置複雜,但先記住主要格式再慢慢擴充設定,一定能逐漸熟練的!